package com.company.dp;

/**
 * @author jrue
 * @description https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/
 * @date 2019/11/18 17:13
 * 给定一个数组，它的第 i 个元素是一支给定股票第 i 天的价格。
 *
 * 如果你最多只允许完成一笔交易（即买入和卖出一支股票），设计一个算法来计算你所能获取的最大利润。
 *
 * 注意你不能在买入股票前卖出股票。
 */
public class BestTimeToBuyAndSellStock {

    public static void main(String[] args) {
        System.out.println(maxProfit(new int[]{7,6,4,3,1}));
    }

    // dp
    public static int maxProfit(int[] prices) {
        if (prices.length == 0) return 0;
        int[] dp = new int[prices.length];
        dp[0] = 0;

        for (int i = 1; i < prices.length; i++) {
            int min = prices[i - 1];
            for (int j = 0; j < i - 1; j++) {
                min = Math.min(min,prices[j]);
            }
            dp[i] = Math.max(dp[i - 1], prices[i] - min);
        }

        return dp[prices.length - 1];

    }

}
